


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdint.h>
#include <x86intrin.h>


void print128hex (const __m128i v) {
  uint8_t a[16];
  _mm_store_si128 ((__m128i*)a, v);
  for (int i = 0; i < 16; i++)
    printf("%02X",a[i]);
  puts("");  
}

void print64bin (const uint64_t n) {
  for (int i = 1; i <= 64; i++)
    printf("%lu",(n>>(64-i)) & 1);
}
void print8bin (const uint8_t n) {
  for (int i = 1; i <= 8; i++)
    printf("%d",(n>>(8-i)) & 1);
}

void print128bin (const __m128i v) {
  uint8_t out[16];
  _mm_store_si128 ((__m128i*)out, v);
  for (int i = 0; i < 16; i++) {
    print8bin(out[i]);
  }
  puts("");
}



void real_ortho_128x128(__m128i data[8]) {

  __m128i mask_l[3] = {
    _mm_set1_epi64x(0xaaaaaaaaaaaaaaaaUL),
    _mm_set1_epi64x(0xccccccccccccccccUL),
    _mm_set1_epi64x(0xf0f0f0f0f0f0f0f0UL)
  
  };

  __m128i mask_r[3] = {
    _mm_set1_epi64x(0x5555555555555555UL),
    _mm_set1_epi64x(0x3333333333333333UL),
    _mm_set1_epi64x(0x0f0f0f0f0f0f0f0fUL)
  };
  
  for (int i = 0; i < 3; i ++) {
    int n = (1UL << i);
    for (int j = 0; j < 8; j += (2 * n))
      for (int k = 0; k < n; k ++) {
        __m128i u = _mm_and_si128(data[j + k], mask_l[i]);
        __m128i v = _mm_and_si128(data[j + k], mask_r[i]);
        __m128i x = _mm_and_si128(data[j + n + k], mask_l[i]);
        __m128i y = _mm_and_si128(data[j + n + k], mask_r[i]);
        data[j + k] = _mm_or_si128(u, _mm_srli_epi64(x, n));
        data[j + n + k] = _mm_or_si128(_mm_slli_epi64(v, n), y);
      }
  }
  
  for (int i = 0; i < 8; i++)
    data[i] =  _mm_shuffle_epi8(data[i],_mm_set_epi8(15,11,7,3,
                                                     14,10,6,2,
                                                     13,9,5,1,
                                                     12,8,4,0));  
}


/* Do NOT change the order of those define/include */

/* defining "BENCH" or "STD" */
/* (will impact the .h functions loaded by the .h) */
#define NO_RUNTIME
/* including the architecture specific .h */
#include "SSE.h"

/* auxiliary functions */
void SubBytes_single__ (/*inputs*/ DATATYPE U0,DATATYPE U1,DATATYPE U2,DATATYPE U3,DATATYPE U4,DATATYPE U5,DATATYPE U6,DATATYPE U7, /*outputs*/ DATATYPE* S0,DATATYPE* S1,DATATYPE* S2,DATATYPE* S3,DATATYPE* S4,DATATYPE* S5,DATATYPE* S6,DATATYPE* S7) {
  
  // Variables declaration
  DATATYPE _tmp1_;
  DATATYPE _tmp2_;
  DATATYPE _tmp3_;
  DATATYPE _tmp4_;
  DATATYPE t0;
  DATATYPE t1;
  DATATYPE t10;
  DATATYPE t11;
  DATATYPE t12;
  DATATYPE t13;
  DATATYPE t14;
  DATATYPE t15;
  DATATYPE t16;
  DATATYPE t17;
  DATATYPE t18;
  DATATYPE t19;
  DATATYPE t2;
  DATATYPE t20;
  DATATYPE t21;
  DATATYPE t22;
  DATATYPE t23;
  DATATYPE t24;
  DATATYPE t25;
  DATATYPE t26;
  DATATYPE t27;
  DATATYPE t28;
  DATATYPE t29;
  DATATYPE t3;
  DATATYPE t30;
  DATATYPE t31;
  DATATYPE t32;
  DATATYPE t33;
  DATATYPE t34;
  DATATYPE t35;
  DATATYPE t36;
  DATATYPE t37;
  DATATYPE t38;
  DATATYPE t39;
  DATATYPE t4;
  DATATYPE t40;
  DATATYPE t41;
  DATATYPE t42;
  DATATYPE t43;
  DATATYPE t44;
  DATATYPE t45;
  DATATYPE t5;
  DATATYPE t6;
  DATATYPE t7;
  DATATYPE t8;
  DATATYPE t9;
  DATATYPE tc1;
  DATATYPE tc10;
  DATATYPE tc11;
  DATATYPE tc12;
  DATATYPE tc13;
  DATATYPE tc14;
  DATATYPE tc16;
  DATATYPE tc17;
  DATATYPE tc18;
  DATATYPE tc2;
  DATATYPE tc20;
  DATATYPE tc21;
  DATATYPE tc26;
  DATATYPE tc3;
  DATATYPE tc4;
  DATATYPE tc5;
  DATATYPE tc6;
  DATATYPE tc7;
  DATATYPE tc8;
  DATATYPE tc9;
  DATATYPE y1;
  DATATYPE y10;
  DATATYPE y11;
  DATATYPE y12;
  DATATYPE y13;
  DATATYPE y14;
  DATATYPE y15;
  DATATYPE y16;
  DATATYPE y17;
  DATATYPE y18;
  DATATYPE y19;
  DATATYPE y2;
  DATATYPE y20;
  DATATYPE y21;
  DATATYPE y3;
  DATATYPE y4;
  DATATYPE y5;
  DATATYPE y6;
  DATATYPE y7;
  DATATYPE y8;
  DATATYPE y9;
  DATATYPE z0;
  DATATYPE z1;
  DATATYPE z10;
  DATATYPE z11;
  DATATYPE z12;
  DATATYPE z13;
  DATATYPE z14;
  DATATYPE z15;
  DATATYPE z16;
  DATATYPE z17;
  DATATYPE z2;
  DATATYPE z3;
  DATATYPE z4;
  DATATYPE z5;
  DATATYPE z6;
  DATATYPE z7;
  DATATYPE z8;
  DATATYPE z9;


  // Instructions (body)
  y14 = XOR(U3,U5);
  y13 = XOR(U0,U6);
  y9 = XOR(U0,U3);
  y8 = XOR(U0,U5);
  t0 = XOR(U1,U2);
  y1 = XOR(t0,U7);
  y4 = XOR(y1,U3);
  y12 = XOR(y13,y14);
  y2 = XOR(y1,U0);
  y5 = XOR(y1,U6);
  y3 = XOR(y5,y8);
  t1 = XOR(U4,y12);
  y15 = XOR(t1,U5);
  y20 = XOR(t1,U1);
  y6 = XOR(y15,U7);
  y10 = XOR(y15,t0);
  y11 = XOR(y20,y9);
  y7 = XOR(U7,y11);
  y17 = XOR(y10,y11);
  y19 = XOR(y10,y8);
  y16 = XOR(t0,y11);
  y21 = XOR(y13,y16);
  y18 = XOR(U0,y16);
  t2 = AND(y12,y15);
  t3 = AND(y3,y6);
  t4 = XOR(t3,t2);
  t5 = AND(y4,U7);
  t6 = XOR(t5,t2);
  t7 = AND(y13,y16);
  t8 = AND(y5,y1);
  t9 = XOR(t8,t7);
  t10 = AND(y2,y7);
  t11 = XOR(t10,t7);
  t12 = AND(y9,y11);
  t13 = AND(y14,y17);
  t14 = XOR(t13,t12);
  t15 = AND(y8,y10);
  t16 = XOR(t15,t12);
  t17 = XOR(t4,y20);
  t18 = XOR(t6,t16);
  t19 = XOR(t9,t14);
  t20 = XOR(t11,t16);
  t21 = XOR(t17,t14);
  t22 = XOR(t18,y19);
  t23 = XOR(t19,y21);
  t24 = XOR(t20,y18);
  t25 = XOR(t21,t22);
  t26 = AND(t21,t23);
  t27 = XOR(t24,t26);
  t28 = AND(t25,t27);
  t29 = XOR(t28,t22);
  t30 = XOR(t23,t24);
  t31 = XOR(t22,t26);
  t32 = AND(t31,t30);
  t33 = XOR(t32,t24);
  t34 = XOR(t23,t33);
  t35 = XOR(t27,t33);
  t36 = AND(t24,t35);
  t37 = XOR(t36,t34);
  t38 = XOR(t27,t36);
  t39 = AND(t29,t38);
  t40 = XOR(t25,t39);
  t41 = XOR(t40,t37);
  t42 = XOR(t29,t33);
  t43 = XOR(t29,t40);
  t44 = XOR(t33,t37);
  t45 = XOR(t42,t41);
  z0 = AND(t44,y15);
  z1 = AND(t37,y6);
  z2 = AND(t33,U7);
  z3 = AND(t43,y16);
  z4 = AND(t40,y1);
  z5 = AND(t29,y7);
  z6 = AND(t42,y11);
  z7 = AND(t45,y17);
  z8 = AND(t41,y10);
  z9 = AND(t44,y12);
  z10 = AND(t37,y3);
  z11 = AND(t33,y4);
  z12 = AND(t43,y13);
  z13 = AND(t40,y5);
  z14 = AND(t29,y2);
  z15 = AND(t42,y9);
  z16 = AND(t45,y14);
  z17 = AND(t41,y8);
  tc1 = XOR(z15,z16);
  tc2 = XOR(z10,tc1);
  tc3 = XOR(z9,tc2);
  tc4 = XOR(z0,z2);
  tc5 = XOR(z1,z0);
  tc6 = XOR(z3,z4);
  tc7 = XOR(z12,tc4);
  tc8 = XOR(z7,tc6);
  tc9 = XOR(z8,tc7);
  tc10 = XOR(tc8,tc9);
  tc11 = XOR(tc6,tc5);
  tc12 = XOR(z3,z5);
  tc13 = XOR(z13,tc1);
  tc14 = XOR(tc4,tc12);
  *S3 = XOR(tc3,tc11);
  tc16 = XOR(z6,tc8);
  tc17 = XOR(z14,tc10);
  tc18 = XOR(tc13,tc14);
  _tmp1_ = XOR(z12,tc18);
  *S7 = NOT(_tmp1_);
  tc20 = XOR(z15,tc16);
  tc21 = XOR(tc2,z11);
  *S0 = XOR(tc3,tc16);
  _tmp2_ = XOR(tc10,tc18);
  *S6 = NOT(_tmp2_);
  *S4 = XOR(tc14,*S3);
  _tmp3_ = XOR(*S3,tc16);
  *S1 = NOT(_tmp3_);
  tc26 = XOR(tc17,tc20);
  _tmp4_ = XOR(tc26,z17);
  *S2 = NOT(_tmp4_);
  *S5 = XOR(tc21,tc17);

}

void ShiftRows_single__(/*input*/ DATATYPE inputSR__, /*outputs*/ DATATYPE* out__) {
   *out__ = PERMUT_16(inputSR__,0,1,2,3,5,6,7,4,10,11,8,9,15,12,13,14);
}

void RL32__(/*input*/ DATATYPE input__, /*outputs*/ DATATYPE* out__) {
   *out__ = PERMUT_4(input__,1,2,3,0);
}

void RL64__(/*input*/ DATATYPE input__, /*outputs*/ DATATYPE* out__) {
   *out__ = PERMUT_4(input__,2,3,0,1);
}

/* main function */
void AES__ (/*inputs*/ DATATYPE plain__[8],DATATYPE key__[11][8], /*outputs*/ DATATYPE cipher__[8]) {
  
  // Variables declaration
  DATATYPE MixColumn___1__tmp10_;
  DATATYPE MixColumn___1__tmp11_;
  DATATYPE MixColumn___1__tmp16_;
  DATATYPE MixColumn___1__tmp17_;
  DATATYPE MixColumn___1__tmp18_;
  DATATYPE MixColumn___1__tmp20_;
  DATATYPE MixColumn___1__tmp21_;
  DATATYPE MixColumn___1__tmp24_;
  DATATYPE MixColumn___1__tmp25_;
  DATATYPE MixColumn___1__tmp27_;
  DATATYPE MixColumn___1__tmp28_;
  DATATYPE MixColumn___1__tmp33_;
  DATATYPE MixColumn___1__tmp34_;
  DATATYPE MixColumn___1__tmp35_;
  DATATYPE MixColumn___1__tmp37_;
  DATATYPE MixColumn___1__tmp38_;
  DATATYPE MixColumn___1__tmp43_;
  DATATYPE MixColumn___1__tmp44_;
  DATATYPE MixColumn___1__tmp45_;
  DATATYPE MixColumn___1__tmp47_;
  DATATYPE MixColumn___1__tmp48_;
  DATATYPE MixColumn___1__tmp51_;
  DATATYPE MixColumn___1__tmp52_;
  DATATYPE MixColumn___1__tmp54_;
  DATATYPE MixColumn___1__tmp55_;
  DATATYPE MixColumn___1__tmp58_;
  DATATYPE MixColumn___1__tmp59_;
  DATATYPE MixColumn___1__tmp5_;
  DATATYPE MixColumn___1__tmp61_;
  DATATYPE MixColumn___1__tmp62_;
  DATATYPE MixColumn___1__tmp66_;
  DATATYPE MixColumn___1__tmp69_;
  DATATYPE MixColumn___1__tmp6_;
  DATATYPE MixColumn___1__tmp7_;
  DATATYPE MixColumn___1__tmp8_;
  DATATYPE MixColumn___2__tmp10_;
  DATATYPE MixColumn___2__tmp11_;
  DATATYPE MixColumn___2__tmp16_;
  DATATYPE MixColumn___2__tmp17_;
  DATATYPE MixColumn___2__tmp18_;
  DATATYPE MixColumn___2__tmp20_;
  DATATYPE MixColumn___2__tmp21_;
  DATATYPE MixColumn___2__tmp24_;
  DATATYPE MixColumn___2__tmp25_;
  DATATYPE MixColumn___2__tmp27_;
  DATATYPE MixColumn___2__tmp28_;
  DATATYPE MixColumn___2__tmp33_;
  DATATYPE MixColumn___2__tmp34_;
  DATATYPE MixColumn___2__tmp35_;
  DATATYPE MixColumn___2__tmp37_;
  DATATYPE MixColumn___2__tmp38_;
  DATATYPE MixColumn___2__tmp43_;
  DATATYPE MixColumn___2__tmp44_;
  DATATYPE MixColumn___2__tmp45_;
  DATATYPE MixColumn___2__tmp47_;
  DATATYPE MixColumn___2__tmp48_;
  DATATYPE MixColumn___2__tmp51_;
  DATATYPE MixColumn___2__tmp52_;
  DATATYPE MixColumn___2__tmp54_;
  DATATYPE MixColumn___2__tmp55_;
  DATATYPE MixColumn___2__tmp58_;
  DATATYPE MixColumn___2__tmp59_;
  DATATYPE MixColumn___2__tmp5_;
  DATATYPE MixColumn___2__tmp61_;
  DATATYPE MixColumn___2__tmp62_;
  DATATYPE MixColumn___2__tmp66_;
  DATATYPE MixColumn___2__tmp69_;
  DATATYPE MixColumn___2__tmp6_;
  DATATYPE MixColumn___2__tmp7_;
  DATATYPE MixColumn___2__tmp8_;
  DATATYPE MixColumn___3__tmp10_;
  DATATYPE MixColumn___3__tmp11_;
  DATATYPE MixColumn___3__tmp16_;
  DATATYPE MixColumn___3__tmp17_;
  DATATYPE MixColumn___3__tmp18_;
  DATATYPE MixColumn___3__tmp20_;
  DATATYPE MixColumn___3__tmp21_;
  DATATYPE MixColumn___3__tmp24_;
  DATATYPE MixColumn___3__tmp25_;
  DATATYPE MixColumn___3__tmp27_;
  DATATYPE MixColumn___3__tmp28_;
  DATATYPE MixColumn___3__tmp33_;
  DATATYPE MixColumn___3__tmp34_;
  DATATYPE MixColumn___3__tmp35_;
  DATATYPE MixColumn___3__tmp37_;
  DATATYPE MixColumn___3__tmp38_;
  DATATYPE MixColumn___3__tmp43_;
  DATATYPE MixColumn___3__tmp44_;
  DATATYPE MixColumn___3__tmp45_;
  DATATYPE MixColumn___3__tmp47_;
  DATATYPE MixColumn___3__tmp48_;
  DATATYPE MixColumn___3__tmp51_;
  DATATYPE MixColumn___3__tmp52_;
  DATATYPE MixColumn___3__tmp54_;
  DATATYPE MixColumn___3__tmp55_;
  DATATYPE MixColumn___3__tmp58_;
  DATATYPE MixColumn___3__tmp59_;
  DATATYPE MixColumn___3__tmp5_;
  DATATYPE MixColumn___3__tmp61_;
  DATATYPE MixColumn___3__tmp62_;
  DATATYPE MixColumn___3__tmp66_;
  DATATYPE MixColumn___3__tmp69_;
  DATATYPE MixColumn___3__tmp6_;
  DATATYPE MixColumn___3__tmp7_;
  DATATYPE MixColumn___3__tmp8_;
  DATATYPE MixColumn___4__tmp10_;
  DATATYPE MixColumn___4__tmp11_;
  DATATYPE MixColumn___4__tmp16_;
  DATATYPE MixColumn___4__tmp17_;
  DATATYPE MixColumn___4__tmp18_;
  DATATYPE MixColumn___4__tmp20_;
  DATATYPE MixColumn___4__tmp21_;
  DATATYPE MixColumn___4__tmp24_;
  DATATYPE MixColumn___4__tmp25_;
  DATATYPE MixColumn___4__tmp27_;
  DATATYPE MixColumn___4__tmp28_;
  DATATYPE MixColumn___4__tmp33_;
  DATATYPE MixColumn___4__tmp34_;
  DATATYPE MixColumn___4__tmp35_;
  DATATYPE MixColumn___4__tmp37_;
  DATATYPE MixColumn___4__tmp38_;
  DATATYPE MixColumn___4__tmp43_;
  DATATYPE MixColumn___4__tmp44_;
  DATATYPE MixColumn___4__tmp45_;
  DATATYPE MixColumn___4__tmp47_;
  DATATYPE MixColumn___4__tmp48_;
  DATATYPE MixColumn___4__tmp51_;
  DATATYPE MixColumn___4__tmp52_;
  DATATYPE MixColumn___4__tmp54_;
  DATATYPE MixColumn___4__tmp55_;
  DATATYPE MixColumn___4__tmp58_;
  DATATYPE MixColumn___4__tmp59_;
  DATATYPE MixColumn___4__tmp5_;
  DATATYPE MixColumn___4__tmp61_;
  DATATYPE MixColumn___4__tmp62_;
  DATATYPE MixColumn___4__tmp66_;
  DATATYPE MixColumn___4__tmp69_;
  DATATYPE MixColumn___4__tmp6_;
  DATATYPE MixColumn___4__tmp7_;
  DATATYPE MixColumn___4__tmp8_;
  DATATYPE MixColumn___5__tmp10_;
  DATATYPE MixColumn___5__tmp11_;
  DATATYPE MixColumn___5__tmp16_;
  DATATYPE MixColumn___5__tmp17_;
  DATATYPE MixColumn___5__tmp18_;
  DATATYPE MixColumn___5__tmp20_;
  DATATYPE MixColumn___5__tmp21_;
  DATATYPE MixColumn___5__tmp24_;
  DATATYPE MixColumn___5__tmp25_;
  DATATYPE MixColumn___5__tmp27_;
  DATATYPE MixColumn___5__tmp28_;
  DATATYPE MixColumn___5__tmp33_;
  DATATYPE MixColumn___5__tmp34_;
  DATATYPE MixColumn___5__tmp35_;
  DATATYPE MixColumn___5__tmp37_;
  DATATYPE MixColumn___5__tmp38_;
  DATATYPE MixColumn___5__tmp43_;
  DATATYPE MixColumn___5__tmp44_;
  DATATYPE MixColumn___5__tmp45_;
  DATATYPE MixColumn___5__tmp47_;
  DATATYPE MixColumn___5__tmp48_;
  DATATYPE MixColumn___5__tmp51_;
  DATATYPE MixColumn___5__tmp52_;
  DATATYPE MixColumn___5__tmp54_;
  DATATYPE MixColumn___5__tmp55_;
  DATATYPE MixColumn___5__tmp58_;
  DATATYPE MixColumn___5__tmp59_;
  DATATYPE MixColumn___5__tmp5_;
  DATATYPE MixColumn___5__tmp61_;
  DATATYPE MixColumn___5__tmp62_;
  DATATYPE MixColumn___5__tmp66_;
  DATATYPE MixColumn___5__tmp69_;
  DATATYPE MixColumn___5__tmp6_;
  DATATYPE MixColumn___5__tmp7_;
  DATATYPE MixColumn___5__tmp8_;
  DATATYPE MixColumn___6__tmp10_;
  DATATYPE MixColumn___6__tmp11_;
  DATATYPE MixColumn___6__tmp16_;
  DATATYPE MixColumn___6__tmp17_;
  DATATYPE MixColumn___6__tmp18_;
  DATATYPE MixColumn___6__tmp20_;
  DATATYPE MixColumn___6__tmp21_;
  DATATYPE MixColumn___6__tmp24_;
  DATATYPE MixColumn___6__tmp25_;
  DATATYPE MixColumn___6__tmp27_;
  DATATYPE MixColumn___6__tmp28_;
  DATATYPE MixColumn___6__tmp33_;
  DATATYPE MixColumn___6__tmp34_;
  DATATYPE MixColumn___6__tmp35_;
  DATATYPE MixColumn___6__tmp37_;
  DATATYPE MixColumn___6__tmp38_;
  DATATYPE MixColumn___6__tmp43_;
  DATATYPE MixColumn___6__tmp44_;
  DATATYPE MixColumn___6__tmp45_;
  DATATYPE MixColumn___6__tmp47_;
  DATATYPE MixColumn___6__tmp48_;
  DATATYPE MixColumn___6__tmp51_;
  DATATYPE MixColumn___6__tmp52_;
  DATATYPE MixColumn___6__tmp54_;
  DATATYPE MixColumn___6__tmp55_;
  DATATYPE MixColumn___6__tmp58_;
  DATATYPE MixColumn___6__tmp59_;
  DATATYPE MixColumn___6__tmp5_;
  DATATYPE MixColumn___6__tmp61_;
  DATATYPE MixColumn___6__tmp62_;
  DATATYPE MixColumn___6__tmp66_;
  DATATYPE MixColumn___6__tmp69_;
  DATATYPE MixColumn___6__tmp6_;
  DATATYPE MixColumn___6__tmp7_;
  DATATYPE MixColumn___6__tmp8_;
  DATATYPE MixColumn___7__tmp10_;
  DATATYPE MixColumn___7__tmp11_;
  DATATYPE MixColumn___7__tmp16_;
  DATATYPE MixColumn___7__tmp17_;
  DATATYPE MixColumn___7__tmp18_;
  DATATYPE MixColumn___7__tmp20_;
  DATATYPE MixColumn___7__tmp21_;
  DATATYPE MixColumn___7__tmp24_;
  DATATYPE MixColumn___7__tmp25_;
  DATATYPE MixColumn___7__tmp27_;
  DATATYPE MixColumn___7__tmp28_;
  DATATYPE MixColumn___7__tmp33_;
  DATATYPE MixColumn___7__tmp34_;
  DATATYPE MixColumn___7__tmp35_;
  DATATYPE MixColumn___7__tmp37_;
  DATATYPE MixColumn___7__tmp38_;
  DATATYPE MixColumn___7__tmp43_;
  DATATYPE MixColumn___7__tmp44_;
  DATATYPE MixColumn___7__tmp45_;
  DATATYPE MixColumn___7__tmp47_;
  DATATYPE MixColumn___7__tmp48_;
  DATATYPE MixColumn___7__tmp51_;
  DATATYPE MixColumn___7__tmp52_;
  DATATYPE MixColumn___7__tmp54_;
  DATATYPE MixColumn___7__tmp55_;
  DATATYPE MixColumn___7__tmp58_;
  DATATYPE MixColumn___7__tmp59_;
  DATATYPE MixColumn___7__tmp5_;
  DATATYPE MixColumn___7__tmp61_;
  DATATYPE MixColumn___7__tmp62_;
  DATATYPE MixColumn___7__tmp66_;
  DATATYPE MixColumn___7__tmp69_;
  DATATYPE MixColumn___7__tmp6_;
  DATATYPE MixColumn___7__tmp7_;
  DATATYPE MixColumn___7__tmp8_;
  DATATYPE MixColumn___8__tmp10_;
  DATATYPE MixColumn___8__tmp11_;
  DATATYPE MixColumn___8__tmp16_;
  DATATYPE MixColumn___8__tmp17_;
  DATATYPE MixColumn___8__tmp18_;
  DATATYPE MixColumn___8__tmp20_;
  DATATYPE MixColumn___8__tmp21_;
  DATATYPE MixColumn___8__tmp24_;
  DATATYPE MixColumn___8__tmp25_;
  DATATYPE MixColumn___8__tmp27_;
  DATATYPE MixColumn___8__tmp28_;
  DATATYPE MixColumn___8__tmp33_;
  DATATYPE MixColumn___8__tmp34_;
  DATATYPE MixColumn___8__tmp35_;
  DATATYPE MixColumn___8__tmp37_;
  DATATYPE MixColumn___8__tmp38_;
  DATATYPE MixColumn___8__tmp43_;
  DATATYPE MixColumn___8__tmp44_;
  DATATYPE MixColumn___8__tmp45_;
  DATATYPE MixColumn___8__tmp47_;
  DATATYPE MixColumn___8__tmp48_;
  DATATYPE MixColumn___8__tmp51_;
  DATATYPE MixColumn___8__tmp52_;
  DATATYPE MixColumn___8__tmp54_;
  DATATYPE MixColumn___8__tmp55_;
  DATATYPE MixColumn___8__tmp58_;
  DATATYPE MixColumn___8__tmp59_;
  DATATYPE MixColumn___8__tmp5_;
  DATATYPE MixColumn___8__tmp61_;
  DATATYPE MixColumn___8__tmp62_;
  DATATYPE MixColumn___8__tmp66_;
  DATATYPE MixColumn___8__tmp69_;
  DATATYPE MixColumn___8__tmp6_;
  DATATYPE MixColumn___8__tmp7_;
  DATATYPE MixColumn___8__tmp8_;
  DATATYPE MixColumn___9__tmp10_;
  DATATYPE MixColumn___9__tmp11_;
  DATATYPE MixColumn___9__tmp16_;
  DATATYPE MixColumn___9__tmp17_;
  DATATYPE MixColumn___9__tmp18_;
  DATATYPE MixColumn___9__tmp20_;
  DATATYPE MixColumn___9__tmp21_;
  DATATYPE MixColumn___9__tmp24_;
  DATATYPE MixColumn___9__tmp25_;
  DATATYPE MixColumn___9__tmp27_;
  DATATYPE MixColumn___9__tmp28_;
  DATATYPE MixColumn___9__tmp33_;
  DATATYPE MixColumn___9__tmp34_;
  DATATYPE MixColumn___9__tmp35_;
  DATATYPE MixColumn___9__tmp37_;
  DATATYPE MixColumn___9__tmp38_;
  DATATYPE MixColumn___9__tmp43_;
  DATATYPE MixColumn___9__tmp44_;
  DATATYPE MixColumn___9__tmp45_;
  DATATYPE MixColumn___9__tmp47_;
  DATATYPE MixColumn___9__tmp48_;
  DATATYPE MixColumn___9__tmp51_;
  DATATYPE MixColumn___9__tmp52_;
  DATATYPE MixColumn___9__tmp54_;
  DATATYPE MixColumn___9__tmp55_;
  DATATYPE MixColumn___9__tmp58_;
  DATATYPE MixColumn___9__tmp59_;
  DATATYPE MixColumn___9__tmp5_;
  DATATYPE MixColumn___9__tmp61_;
  DATATYPE MixColumn___9__tmp62_;
  DATATYPE MixColumn___9__tmp66_;
  DATATYPE MixColumn___9__tmp69_;
  DATATYPE MixColumn___9__tmp6_;
  DATATYPE MixColumn___9__tmp7_;
  DATATYPE MixColumn___9__tmp8_;
  DATATYPE _tmp70_1;
  DATATYPE _tmp70_2;
  DATATYPE _tmp70_3;
  DATATYPE _tmp70_4;
  DATATYPE _tmp70_5;
  DATATYPE _tmp70_6;
  DATATYPE _tmp70_7;
  DATATYPE _tmp70_8;
  DATATYPE _tmp71_1;
  DATATYPE _tmp71_2;
  DATATYPE _tmp71_3;
  DATATYPE _tmp71_4;
  DATATYPE _tmp71_5;
  DATATYPE _tmp71_6;
  DATATYPE _tmp71_7;
  DATATYPE _tmp71_8;
  DATATYPE _tmp72_1;
  DATATYPE _tmp72_2;
  DATATYPE _tmp72_3;
  DATATYPE _tmp72_4;
  DATATYPE _tmp72_5;
  DATATYPE _tmp72_6;
  DATATYPE _tmp72_7;
  DATATYPE _tmp72_8;
  DATATYPE _tmp73_1;
  DATATYPE _tmp73_2;
  DATATYPE _tmp73_3;
  DATATYPE _tmp73_4;
  DATATYPE _tmp73_5;
  DATATYPE _tmp73_6;
  DATATYPE _tmp73_7;
  DATATYPE _tmp73_8;
  DATATYPE _tmp74_1;
  DATATYPE _tmp74_2;
  DATATYPE _tmp74_3;
  DATATYPE _tmp74_4;
  DATATYPE _tmp74_5;
  DATATYPE _tmp74_6;
  DATATYPE _tmp74_7;
  DATATYPE _tmp74_8;
  DATATYPE _tmp75_1;
  DATATYPE _tmp75_2;
  DATATYPE _tmp75_3;
  DATATYPE _tmp75_4;
  DATATYPE _tmp75_5;
  DATATYPE _tmp75_6;
  DATATYPE _tmp75_7;
  DATATYPE _tmp75_8;
  DATATYPE _tmp76_1;
  DATATYPE _tmp76_2;
  DATATYPE _tmp76_3;
  DATATYPE _tmp76_4;
  DATATYPE _tmp76_5;
  DATATYPE _tmp76_6;
  DATATYPE _tmp76_7;
  DATATYPE _tmp76_8;
  DATATYPE _tmp77_1;
  DATATYPE _tmp77_2;
  DATATYPE _tmp77_3;
  DATATYPE _tmp77_4;
  DATATYPE _tmp77_5;
  DATATYPE _tmp77_6;
  DATATYPE _tmp77_7;
  DATATYPE _tmp77_8;
  DATATYPE _tmp78_1;
  DATATYPE _tmp78_2;
  DATATYPE _tmp78_3;
  DATATYPE _tmp78_4;
  DATATYPE _tmp78_5;
  DATATYPE _tmp78_6;
  DATATYPE _tmp78_7;
  DATATYPE _tmp78_8;
  DATATYPE _tmp79_1;
  DATATYPE _tmp79_2;
  DATATYPE _tmp79_3;
  DATATYPE _tmp79_4;
  DATATYPE _tmp79_5;
  DATATYPE _tmp79_6;
  DATATYPE _tmp79_7;
  DATATYPE _tmp79_8;
  DATATYPE _tmp80_1;
  DATATYPE _tmp80_2;
  DATATYPE _tmp80_3;
  DATATYPE _tmp80_4;
  DATATYPE _tmp80_5;
  DATATYPE _tmp80_6;
  DATATYPE _tmp80_7;
  DATATYPE _tmp80_8;
  DATATYPE _tmp81_1;
  DATATYPE _tmp81_2;
  DATATYPE _tmp81_3;
  DATATYPE _tmp81_4;
  DATATYPE _tmp81_5;
  DATATYPE _tmp81_6;
  DATATYPE _tmp81_7;
  DATATYPE _tmp81_8;
  DATATYPE _tmp82_1;
  DATATYPE _tmp82_2;
  DATATYPE _tmp82_3;
  DATATYPE _tmp82_4;
  DATATYPE _tmp82_5;
  DATATYPE _tmp82_6;
  DATATYPE _tmp82_7;
  DATATYPE _tmp82_8;
  DATATYPE _tmp83_1;
  DATATYPE _tmp83_2;
  DATATYPE _tmp83_3;
  DATATYPE _tmp83_4;
  DATATYPE _tmp83_5;
  DATATYPE _tmp83_6;
  DATATYPE _tmp83_7;
  DATATYPE _tmp83_8;
  DATATYPE _tmp84_1;
  DATATYPE _tmp84_2;
  DATATYPE _tmp84_3;
  DATATYPE _tmp84_4;
  DATATYPE _tmp84_5;
  DATATYPE _tmp84_6;
  DATATYPE _tmp84_7;
  DATATYPE _tmp84_8;
  DATATYPE _tmp85_1;
  DATATYPE _tmp85_2;
  DATATYPE _tmp85_3;
  DATATYPE _tmp85_4;
  DATATYPE _tmp85_5;
  DATATYPE _tmp85_6;
  DATATYPE _tmp85_7;
  DATATYPE _tmp85_8;
  DATATYPE _tmp86_1;
  DATATYPE _tmp86_2;
  DATATYPE _tmp86_3;
  DATATYPE _tmp86_4;
  DATATYPE _tmp86_5;
  DATATYPE _tmp86_6;
  DATATYPE _tmp86_7;
  DATATYPE _tmp86_8;
  DATATYPE _tmp87_1;
  DATATYPE _tmp87_2;
  DATATYPE _tmp87_3;
  DATATYPE _tmp87_4;
  DATATYPE _tmp87_5;
  DATATYPE _tmp87_6;
  DATATYPE _tmp87_7;
  DATATYPE _tmp87_8;
  DATATYPE _tmp88_1;
  DATATYPE _tmp88_2;
  DATATYPE _tmp88_3;
  DATATYPE _tmp88_4;
  DATATYPE _tmp88_5;
  DATATYPE _tmp88_6;
  DATATYPE _tmp88_7;
  DATATYPE _tmp88_8;
  DATATYPE _tmp89_1;
  DATATYPE _tmp89_2;
  DATATYPE _tmp89_3;
  DATATYPE _tmp89_4;
  DATATYPE _tmp89_5;
  DATATYPE _tmp89_6;
  DATATYPE _tmp89_7;
  DATATYPE _tmp89_8;
  DATATYPE _tmp90_1;
  DATATYPE _tmp90_2;
  DATATYPE _tmp90_3;
  DATATYPE _tmp90_4;
  DATATYPE _tmp90_5;
  DATATYPE _tmp90_6;
  DATATYPE _tmp90_7;
  DATATYPE _tmp90_8;
  DATATYPE _tmp91_1;
  DATATYPE _tmp91_2;
  DATATYPE _tmp91_3;
  DATATYPE _tmp91_4;
  DATATYPE _tmp91_5;
  DATATYPE _tmp91_6;
  DATATYPE _tmp91_7;
  DATATYPE _tmp91_8;
  DATATYPE _tmp92_1;
  DATATYPE _tmp92_2;
  DATATYPE _tmp92_3;
  DATATYPE _tmp92_4;
  DATATYPE _tmp92_5;
  DATATYPE _tmp92_6;
  DATATYPE _tmp92_7;
  DATATYPE _tmp92_8;
  DATATYPE _tmp93_1;
  DATATYPE _tmp93_2;
  DATATYPE _tmp93_3;
  DATATYPE _tmp93_4;
  DATATYPE _tmp93_5;
  DATATYPE _tmp93_6;
  DATATYPE _tmp93_7;
  DATATYPE _tmp93_8;
  DATATYPE _tmp94_1;
  DATATYPE _tmp94_2;
  DATATYPE _tmp94_3;
  DATATYPE _tmp94_4;
  DATATYPE _tmp94_5;
  DATATYPE _tmp94_6;
  DATATYPE _tmp94_7;
  DATATYPE _tmp94_8;
  DATATYPE _tmp95_1;
  DATATYPE _tmp95_2;
  DATATYPE _tmp95_3;
  DATATYPE _tmp95_4;
  DATATYPE _tmp95_5;
  DATATYPE _tmp95_6;
  DATATYPE _tmp95_7;
  DATATYPE _tmp95_8;
  DATATYPE _tmp96_1;
  DATATYPE _tmp96_2;
  DATATYPE _tmp96_3;
  DATATYPE _tmp96_4;
  DATATYPE _tmp96_5;
  DATATYPE _tmp96_6;
  DATATYPE _tmp96_7;
  DATATYPE _tmp96_8;
  DATATYPE _tmp97_1;
  DATATYPE _tmp97_2;
  DATATYPE _tmp97_3;
  DATATYPE _tmp97_4;
  DATATYPE _tmp97_5;
  DATATYPE _tmp97_6;
  DATATYPE _tmp97_7;
  DATATYPE _tmp97_8;
  DATATYPE _tmp98_1;
  DATATYPE _tmp98_2;
  DATATYPE _tmp98_3;
  DATATYPE _tmp98_4;
  DATATYPE _tmp98_5;
  DATATYPE _tmp98_6;
  DATATYPE _tmp98_7;
  DATATYPE _tmp98_8;
  DATATYPE tmp__0__0__;
  DATATYPE tmp__0__1__;
  DATATYPE tmp__0__2__;
  DATATYPE tmp__0__3__;
  DATATYPE tmp__0__4__;
  DATATYPE tmp__0__5__;
  DATATYPE tmp__0__6__;
  DATATYPE tmp__0__7__;
  DATATYPE tmp__1__0__;
  DATATYPE tmp__1__1__;
  DATATYPE tmp__1__2__;
  DATATYPE tmp__1__3__;
  DATATYPE tmp__1__4__;
  DATATYPE tmp__1__5__;
  DATATYPE tmp__1__6__;
  DATATYPE tmp__1__7__;
  DATATYPE tmp__2__0__;
  DATATYPE tmp__2__1__;
  DATATYPE tmp__2__2__;
  DATATYPE tmp__2__3__;
  DATATYPE tmp__2__4__;
  DATATYPE tmp__2__5__;
  DATATYPE tmp__2__6__;
  DATATYPE tmp__2__7__;
  DATATYPE tmp__3__0__;
  DATATYPE tmp__3__1__;
  DATATYPE tmp__3__2__;
  DATATYPE tmp__3__3__;
  DATATYPE tmp__3__4__;
  DATATYPE tmp__3__5__;
  DATATYPE tmp__3__6__;
  DATATYPE tmp__3__7__;
  DATATYPE tmp__4__0__;
  DATATYPE tmp__4__1__;
  DATATYPE tmp__4__2__;
  DATATYPE tmp__4__3__;
  DATATYPE tmp__4__4__;
  DATATYPE tmp__4__5__;
  DATATYPE tmp__4__6__;
  DATATYPE tmp__4__7__;
  DATATYPE tmp__5__0__;
  DATATYPE tmp__5__1__;
  DATATYPE tmp__5__2__;
  DATATYPE tmp__5__3__;
  DATATYPE tmp__5__4__;
  DATATYPE tmp__5__5__;
  DATATYPE tmp__5__6__;
  DATATYPE tmp__5__7__;
  DATATYPE tmp__6__0__;
  DATATYPE tmp__6__1__;
  DATATYPE tmp__6__2__;
  DATATYPE tmp__6__3__;
  DATATYPE tmp__6__4__;
  DATATYPE tmp__6__5__;
  DATATYPE tmp__6__6__;
  DATATYPE tmp__6__7__;
  DATATYPE tmp__7__0__;
  DATATYPE tmp__7__1__;
  DATATYPE tmp__7__2__;
  DATATYPE tmp__7__3__;
  DATATYPE tmp__7__4__;
  DATATYPE tmp__7__5__;
  DATATYPE tmp__7__6__;
  DATATYPE tmp__7__7__;
  DATATYPE tmp__8__0__;
  DATATYPE tmp__8__1__;
  DATATYPE tmp__8__2__;
  DATATYPE tmp__8__3__;
  DATATYPE tmp__8__4__;
  DATATYPE tmp__8__5__;
  DATATYPE tmp__8__6__;
  DATATYPE tmp__8__7__;
  DATATYPE tmp__9__0__;
  DATATYPE tmp__9__1__;
  DATATYPE tmp__9__2__;
  DATATYPE tmp__9__3__;
  DATATYPE tmp__9__4__;
  DATATYPE tmp__9__5__;
  DATATYPE tmp__9__6__;
  DATATYPE tmp__9__7__;


  // Instructions (body)
  tmp__0__0__ = XOR(plain__[0],key__[0][0]);
  tmp__0__1__ = XOR(plain__[1],key__[0][1]);
  tmp__0__2__ = XOR(plain__[2],key__[0][2]);
  tmp__0__3__ = XOR(plain__[3],key__[0][3]);
  tmp__0__4__ = XOR(plain__[4],key__[0][4]);
  tmp__0__5__ = XOR(plain__[5],key__[0][5]);
  tmp__0__6__ = XOR(plain__[6],key__[0][6]);
  tmp__0__7__ = XOR(plain__[7],key__[0][7]);
  SubBytes_single__(tmp__0__0__,tmp__0__1__,tmp__0__2__,tmp__0__3__,tmp__0__4__,tmp__0__5__,tmp__0__6__,tmp__0__7__,&_tmp70_1,&_tmp70_2,&_tmp70_3,&_tmp70_4,&_tmp70_5,&_tmp70_6,&_tmp70_7,&_tmp70_8);
  ShiftRows_single__(_tmp70_1,&_tmp71_1);
  ShiftRows_single__(_tmp70_2,&_tmp71_2);
  ShiftRows_single__(_tmp70_3,&_tmp71_3);
  ShiftRows_single__(_tmp70_4,&_tmp71_4);
  ShiftRows_single__(_tmp70_5,&_tmp71_5);
  ShiftRows_single__(_tmp70_6,&_tmp71_6);
  ShiftRows_single__(_tmp70_7,&_tmp71_7);
  ShiftRows_single__(_tmp70_8,&_tmp71_8);
  RL32__(_tmp71_1,&MixColumn___1__tmp5_);
  MixColumn___1__tmp6_ = XOR(_tmp71_1,MixColumn___1__tmp5_);
  RL32__(_tmp71_8,&MixColumn___1__tmp7_);
  MixColumn___1__tmp10_ = XOR(_tmp71_8,MixColumn___1__tmp7_);
  RL64__(MixColumn___1__tmp10_,&MixColumn___1__tmp11_);
  RL32__(_tmp71_7,&MixColumn___1__tmp17_);
  MixColumn___1__tmp20_ = XOR(_tmp71_7,MixColumn___1__tmp17_);
  RL64__(MixColumn___1__tmp20_,&MixColumn___1__tmp21_);
  RL32__(_tmp71_6,&MixColumn___1__tmp24_);
  MixColumn___1__tmp27_ = XOR(_tmp71_6,MixColumn___1__tmp24_);
  RL64__(MixColumn___1__tmp27_,&MixColumn___1__tmp28_);
  RL32__(_tmp71_5,&MixColumn___1__tmp34_);
  MixColumn___1__tmp37_ = XOR(_tmp71_5,MixColumn___1__tmp34_);
  RL64__(MixColumn___1__tmp37_,&MixColumn___1__tmp38_);
  RL32__(_tmp71_4,&MixColumn___1__tmp44_);
  MixColumn___1__tmp47_ = XOR(_tmp71_4,MixColumn___1__tmp44_);
  RL64__(MixColumn___1__tmp47_,&MixColumn___1__tmp48_);
  RL32__(_tmp71_3,&MixColumn___1__tmp51_);
  MixColumn___1__tmp54_ = XOR(_tmp71_3,MixColumn___1__tmp51_);
  RL64__(MixColumn___1__tmp54_,&MixColumn___1__tmp55_);
  RL32__(_tmp71_2,&MixColumn___1__tmp58_);
  MixColumn___1__tmp61_ = XOR(_tmp71_2,MixColumn___1__tmp58_);
  RL64__(MixColumn___1__tmp61_,&MixColumn___1__tmp62_);
  RL64__(MixColumn___1__tmp6_,&MixColumn___1__tmp69_);
  MixColumn___1__tmp8_ = XOR(MixColumn___1__tmp6_,MixColumn___1__tmp7_);
  _tmp72_8 = XOR(MixColumn___1__tmp8_,MixColumn___1__tmp11_);
  MixColumn___1__tmp16_ = XOR(MixColumn___1__tmp10_,MixColumn___1__tmp6_);
  MixColumn___1__tmp18_ = XOR(MixColumn___1__tmp16_,MixColumn___1__tmp17_);
  _tmp72_7 = XOR(MixColumn___1__tmp18_,MixColumn___1__tmp21_);
  MixColumn___1__tmp25_ = XOR(MixColumn___1__tmp20_,MixColumn___1__tmp24_);
  _tmp72_6 = XOR(MixColumn___1__tmp25_,MixColumn___1__tmp28_);
  MixColumn___1__tmp33_ = XOR(MixColumn___1__tmp27_,MixColumn___1__tmp6_);
  MixColumn___1__tmp35_ = XOR(MixColumn___1__tmp33_,MixColumn___1__tmp34_);
  _tmp72_5 = XOR(MixColumn___1__tmp35_,MixColumn___1__tmp38_);
  MixColumn___1__tmp43_ = XOR(MixColumn___1__tmp37_,MixColumn___1__tmp6_);
  MixColumn___1__tmp45_ = XOR(MixColumn___1__tmp43_,MixColumn___1__tmp44_);
  _tmp72_4 = XOR(MixColumn___1__tmp45_,MixColumn___1__tmp48_);
  MixColumn___1__tmp52_ = XOR(MixColumn___1__tmp47_,MixColumn___1__tmp51_);
  _tmp72_3 = XOR(MixColumn___1__tmp52_,MixColumn___1__tmp55_);
  MixColumn___1__tmp59_ = XOR(MixColumn___1__tmp54_,MixColumn___1__tmp58_);
  _tmp72_2 = XOR(MixColumn___1__tmp59_,MixColumn___1__tmp62_);
  MixColumn___1__tmp66_ = XOR(MixColumn___1__tmp61_,MixColumn___1__tmp5_);
  _tmp72_1 = XOR(MixColumn___1__tmp66_,MixColumn___1__tmp69_);
  tmp__1__0__ = XOR(_tmp72_1,key__[1][0]);
  tmp__1__1__ = XOR(_tmp72_2,key__[1][1]);
  tmp__1__2__ = XOR(_tmp72_3,key__[1][2]);
  tmp__1__3__ = XOR(_tmp72_4,key__[1][3]);
  tmp__1__4__ = XOR(_tmp72_5,key__[1][4]);
  tmp__1__5__ = XOR(_tmp72_6,key__[1][5]);
  tmp__1__6__ = XOR(_tmp72_7,key__[1][6]);
  tmp__1__7__ = XOR(_tmp72_8,key__[1][7]);
  SubBytes_single__(tmp__1__0__,tmp__1__1__,tmp__1__2__,tmp__1__3__,tmp__1__4__,tmp__1__5__,tmp__1__6__,tmp__1__7__,&_tmp73_1,&_tmp73_2,&_tmp73_3,&_tmp73_4,&_tmp73_5,&_tmp73_6,&_tmp73_7,&_tmp73_8);
  ShiftRows_single__(_tmp73_1,&_tmp74_1);
  ShiftRows_single__(_tmp73_2,&_tmp74_2);
  ShiftRows_single__(_tmp73_3,&_tmp74_3);
  ShiftRows_single__(_tmp73_4,&_tmp74_4);
  ShiftRows_single__(_tmp73_5,&_tmp74_5);
  ShiftRows_single__(_tmp73_6,&_tmp74_6);
  ShiftRows_single__(_tmp73_7,&_tmp74_7);
  ShiftRows_single__(_tmp73_8,&_tmp74_8);
  RL32__(_tmp74_1,&MixColumn___2__tmp5_);
  MixColumn___2__tmp6_ = XOR(_tmp74_1,MixColumn___2__tmp5_);
  RL32__(_tmp74_8,&MixColumn___2__tmp7_);
  MixColumn___2__tmp10_ = XOR(_tmp74_8,MixColumn___2__tmp7_);
  RL64__(MixColumn___2__tmp10_,&MixColumn___2__tmp11_);
  RL32__(_tmp74_7,&MixColumn___2__tmp17_);
  MixColumn___2__tmp20_ = XOR(_tmp74_7,MixColumn___2__tmp17_);
  RL64__(MixColumn___2__tmp20_,&MixColumn___2__tmp21_);
  RL32__(_tmp74_6,&MixColumn___2__tmp24_);
  MixColumn___2__tmp27_ = XOR(_tmp74_6,MixColumn___2__tmp24_);
  RL64__(MixColumn___2__tmp27_,&MixColumn___2__tmp28_);
  RL32__(_tmp74_5,&MixColumn___2__tmp34_);
  MixColumn___2__tmp37_ = XOR(_tmp74_5,MixColumn___2__tmp34_);
  RL64__(MixColumn___2__tmp37_,&MixColumn___2__tmp38_);
  RL32__(_tmp74_4,&MixColumn___2__tmp44_);
  MixColumn___2__tmp47_ = XOR(_tmp74_4,MixColumn___2__tmp44_);
  RL64__(MixColumn___2__tmp47_,&MixColumn___2__tmp48_);
  RL32__(_tmp74_3,&MixColumn___2__tmp51_);
  MixColumn___2__tmp54_ = XOR(_tmp74_3,MixColumn___2__tmp51_);
  RL64__(MixColumn___2__tmp54_,&MixColumn___2__tmp55_);
  RL32__(_tmp74_2,&MixColumn___2__tmp58_);
  MixColumn___2__tmp61_ = XOR(_tmp74_2,MixColumn___2__tmp58_);
  RL64__(MixColumn___2__tmp61_,&MixColumn___2__tmp62_);
  RL64__(MixColumn___2__tmp6_,&MixColumn___2__tmp69_);
  MixColumn___2__tmp8_ = XOR(MixColumn___2__tmp6_,MixColumn___2__tmp7_);
  _tmp75_8 = XOR(MixColumn___2__tmp8_,MixColumn___2__tmp11_);
  MixColumn___2__tmp16_ = XOR(MixColumn___2__tmp10_,MixColumn___2__tmp6_);
  MixColumn___2__tmp18_ = XOR(MixColumn___2__tmp16_,MixColumn___2__tmp17_);
  _tmp75_7 = XOR(MixColumn___2__tmp18_,MixColumn___2__tmp21_);
  MixColumn___2__tmp25_ = XOR(MixColumn___2__tmp20_,MixColumn___2__tmp24_);
  _tmp75_6 = XOR(MixColumn___2__tmp25_,MixColumn___2__tmp28_);
  MixColumn___2__tmp33_ = XOR(MixColumn___2__tmp27_,MixColumn___2__tmp6_);
  MixColumn___2__tmp35_ = XOR(MixColumn___2__tmp33_,MixColumn___2__tmp34_);
  _tmp75_5 = XOR(MixColumn___2__tmp35_,MixColumn___2__tmp38_);
  MixColumn___2__tmp43_ = XOR(MixColumn___2__tmp37_,MixColumn___2__tmp6_);
  MixColumn___2__tmp45_ = XOR(MixColumn___2__tmp43_,MixColumn___2__tmp44_);
  _tmp75_4 = XOR(MixColumn___2__tmp45_,MixColumn___2__tmp48_);
  MixColumn___2__tmp52_ = XOR(MixColumn___2__tmp47_,MixColumn___2__tmp51_);
  _tmp75_3 = XOR(MixColumn___2__tmp52_,MixColumn___2__tmp55_);
  MixColumn___2__tmp59_ = XOR(MixColumn___2__tmp54_,MixColumn___2__tmp58_);
  _tmp75_2 = XOR(MixColumn___2__tmp59_,MixColumn___2__tmp62_);
  MixColumn___2__tmp66_ = XOR(MixColumn___2__tmp61_,MixColumn___2__tmp5_);
  _tmp75_1 = XOR(MixColumn___2__tmp66_,MixColumn___2__tmp69_);
  tmp__2__0__ = XOR(_tmp75_1,key__[2][0]);
  tmp__2__1__ = XOR(_tmp75_2,key__[2][1]);
  tmp__2__2__ = XOR(_tmp75_3,key__[2][2]);
  tmp__2__3__ = XOR(_tmp75_4,key__[2][3]);
  tmp__2__4__ = XOR(_tmp75_5,key__[2][4]);
  tmp__2__5__ = XOR(_tmp75_6,key__[2][5]);
  tmp__2__6__ = XOR(_tmp75_7,key__[2][6]);
  tmp__2__7__ = XOR(_tmp75_8,key__[2][7]);
  SubBytes_single__(tmp__2__0__,tmp__2__1__,tmp__2__2__,tmp__2__3__,tmp__2__4__,tmp__2__5__,tmp__2__6__,tmp__2__7__,&_tmp76_1,&_tmp76_2,&_tmp76_3,&_tmp76_4,&_tmp76_5,&_tmp76_6,&_tmp76_7,&_tmp76_8);
  ShiftRows_single__(_tmp76_1,&_tmp77_1);
  ShiftRows_single__(_tmp76_2,&_tmp77_2);
  ShiftRows_single__(_tmp76_3,&_tmp77_3);
  ShiftRows_single__(_tmp76_4,&_tmp77_4);
  ShiftRows_single__(_tmp76_5,&_tmp77_5);
  ShiftRows_single__(_tmp76_6,&_tmp77_6);
  ShiftRows_single__(_tmp76_7,&_tmp77_7);
  ShiftRows_single__(_tmp76_8,&_tmp77_8);
  RL32__(_tmp77_1,&MixColumn___3__tmp5_);
  MixColumn___3__tmp6_ = XOR(_tmp77_1,MixColumn___3__tmp5_);
  RL32__(_tmp77_8,&MixColumn___3__tmp7_);
  MixColumn___3__tmp10_ = XOR(_tmp77_8,MixColumn___3__tmp7_);
  RL64__(MixColumn___3__tmp10_,&MixColumn___3__tmp11_);
  RL32__(_tmp77_7,&MixColumn___3__tmp17_);
  MixColumn___3__tmp20_ = XOR(_tmp77_7,MixColumn___3__tmp17_);
  RL64__(MixColumn___3__tmp20_,&MixColumn___3__tmp21_);
  RL32__(_tmp77_6,&MixColumn___3__tmp24_);
  MixColumn___3__tmp27_ = XOR(_tmp77_6,MixColumn___3__tmp24_);
  RL64__(MixColumn___3__tmp27_,&MixColumn___3__tmp28_);
  RL32__(_tmp77_5,&MixColumn___3__tmp34_);
  MixColumn___3__tmp37_ = XOR(_tmp77_5,MixColumn___3__tmp34_);
  RL64__(MixColumn___3__tmp37_,&MixColumn___3__tmp38_);
  RL32__(_tmp77_4,&MixColumn___3__tmp44_);
  MixColumn___3__tmp47_ = XOR(_tmp77_4,MixColumn___3__tmp44_);
  RL64__(MixColumn___3__tmp47_,&MixColumn___3__tmp48_);
  RL32__(_tmp77_3,&MixColumn___3__tmp51_);
  MixColumn___3__tmp54_ = XOR(_tmp77_3,MixColumn___3__tmp51_);
  RL64__(MixColumn___3__tmp54_,&MixColumn___3__tmp55_);
  RL32__(_tmp77_2,&MixColumn___3__tmp58_);
  MixColumn___3__tmp61_ = XOR(_tmp77_2,MixColumn___3__tmp58_);
  RL64__(MixColumn___3__tmp61_,&MixColumn___3__tmp62_);
  RL64__(MixColumn___3__tmp6_,&MixColumn___3__tmp69_);
  MixColumn___3__tmp8_ = XOR(MixColumn___3__tmp6_,MixColumn___3__tmp7_);
  _tmp78_8 = XOR(MixColumn___3__tmp8_,MixColumn___3__tmp11_);
  MixColumn___3__tmp16_ = XOR(MixColumn___3__tmp10_,MixColumn___3__tmp6_);
  MixColumn___3__tmp18_ = XOR(MixColumn___3__tmp16_,MixColumn___3__tmp17_);
  _tmp78_7 = XOR(MixColumn___3__tmp18_,MixColumn___3__tmp21_);
  MixColumn___3__tmp25_ = XOR(MixColumn___3__tmp20_,MixColumn___3__tmp24_);
  _tmp78_6 = XOR(MixColumn___3__tmp25_,MixColumn___3__tmp28_);
  MixColumn___3__tmp33_ = XOR(MixColumn___3__tmp27_,MixColumn___3__tmp6_);
  MixColumn___3__tmp35_ = XOR(MixColumn___3__tmp33_,MixColumn___3__tmp34_);
  _tmp78_5 = XOR(MixColumn___3__tmp35_,MixColumn___3__tmp38_);
  MixColumn___3__tmp43_ = XOR(MixColumn___3__tmp37_,MixColumn___3__tmp6_);
  MixColumn___3__tmp45_ = XOR(MixColumn___3__tmp43_,MixColumn___3__tmp44_);
  _tmp78_4 = XOR(MixColumn___3__tmp45_,MixColumn___3__tmp48_);
  MixColumn___3__tmp52_ = XOR(MixColumn___3__tmp47_,MixColumn___3__tmp51_);
  _tmp78_3 = XOR(MixColumn___3__tmp52_,MixColumn___3__tmp55_);
  MixColumn___3__tmp59_ = XOR(MixColumn___3__tmp54_,MixColumn___3__tmp58_);
  _tmp78_2 = XOR(MixColumn___3__tmp59_,MixColumn___3__tmp62_);
  MixColumn___3__tmp66_ = XOR(MixColumn___3__tmp61_,MixColumn___3__tmp5_);
  _tmp78_1 = XOR(MixColumn___3__tmp66_,MixColumn___3__tmp69_);
  tmp__3__0__ = XOR(_tmp78_1,key__[3][0]);
  tmp__3__1__ = XOR(_tmp78_2,key__[3][1]);
  tmp__3__2__ = XOR(_tmp78_3,key__[3][2]);
  tmp__3__3__ = XOR(_tmp78_4,key__[3][3]);
  tmp__3__4__ = XOR(_tmp78_5,key__[3][4]);
  tmp__3__5__ = XOR(_tmp78_6,key__[3][5]);
  tmp__3__6__ = XOR(_tmp78_7,key__[3][6]);
  tmp__3__7__ = XOR(_tmp78_8,key__[3][7]);
  SubBytes_single__(tmp__3__0__,tmp__3__1__,tmp__3__2__,tmp__3__3__,tmp__3__4__,tmp__3__5__,tmp__3__6__,tmp__3__7__,&_tmp79_1,&_tmp79_2,&_tmp79_3,&_tmp79_4,&_tmp79_5,&_tmp79_6,&_tmp79_7,&_tmp79_8);
  ShiftRows_single__(_tmp79_1,&_tmp80_1);
  ShiftRows_single__(_tmp79_2,&_tmp80_2);
  ShiftRows_single__(_tmp79_3,&_tmp80_3);
  ShiftRows_single__(_tmp79_4,&_tmp80_4);
  ShiftRows_single__(_tmp79_5,&_tmp80_5);
  ShiftRows_single__(_tmp79_6,&_tmp80_6);
  ShiftRows_single__(_tmp79_7,&_tmp80_7);
  ShiftRows_single__(_tmp79_8,&_tmp80_8);
  RL32__(_tmp80_1,&MixColumn___4__tmp5_);
  MixColumn___4__tmp6_ = XOR(_tmp80_1,MixColumn___4__tmp5_);
  RL32__(_tmp80_8,&MixColumn___4__tmp7_);
  MixColumn___4__tmp10_ = XOR(_tmp80_8,MixColumn___4__tmp7_);
  RL64__(MixColumn___4__tmp10_,&MixColumn___4__tmp11_);
  RL32__(_tmp80_7,&MixColumn___4__tmp17_);
  MixColumn___4__tmp20_ = XOR(_tmp80_7,MixColumn___4__tmp17_);
  RL64__(MixColumn___4__tmp20_,&MixColumn___4__tmp21_);
  RL32__(_tmp80_6,&MixColumn___4__tmp24_);
  MixColumn___4__tmp27_ = XOR(_tmp80_6,MixColumn___4__tmp24_);
  RL64__(MixColumn___4__tmp27_,&MixColumn___4__tmp28_);
  RL32__(_tmp80_5,&MixColumn___4__tmp34_);
  MixColumn___4__tmp37_ = XOR(_tmp80_5,MixColumn___4__tmp34_);
  RL64__(MixColumn___4__tmp37_,&MixColumn___4__tmp38_);
  RL32__(_tmp80_4,&MixColumn___4__tmp44_);
  MixColumn___4__tmp47_ = XOR(_tmp80_4,MixColumn___4__tmp44_);
  RL64__(MixColumn___4__tmp47_,&MixColumn___4__tmp48_);
  RL32__(_tmp80_3,&MixColumn___4__tmp51_);
  MixColumn___4__tmp54_ = XOR(_tmp80_3,MixColumn___4__tmp51_);
  RL64__(MixColumn___4__tmp54_,&MixColumn___4__tmp55_);
  RL32__(_tmp80_2,&MixColumn___4__tmp58_);
  MixColumn___4__tmp61_ = XOR(_tmp80_2,MixColumn___4__tmp58_);
  RL64__(MixColumn___4__tmp61_,&MixColumn___4__tmp62_);
  RL64__(MixColumn___4__tmp6_,&MixColumn___4__tmp69_);
  MixColumn___4__tmp8_ = XOR(MixColumn___4__tmp6_,MixColumn___4__tmp7_);
  _tmp81_8 = XOR(MixColumn___4__tmp8_,MixColumn___4__tmp11_);
  MixColumn___4__tmp16_ = XOR(MixColumn___4__tmp10_,MixColumn___4__tmp6_);
  MixColumn___4__tmp18_ = XOR(MixColumn___4__tmp16_,MixColumn___4__tmp17_);
  _tmp81_7 = XOR(MixColumn___4__tmp18_,MixColumn___4__tmp21_);
  MixColumn___4__tmp25_ = XOR(MixColumn___4__tmp20_,MixColumn___4__tmp24_);
  _tmp81_6 = XOR(MixColumn___4__tmp25_,MixColumn___4__tmp28_);
  MixColumn___4__tmp33_ = XOR(MixColumn___4__tmp27_,MixColumn___4__tmp6_);
  MixColumn___4__tmp35_ = XOR(MixColumn___4__tmp33_,MixColumn___4__tmp34_);
  _tmp81_5 = XOR(MixColumn___4__tmp35_,MixColumn___4__tmp38_);
  MixColumn___4__tmp43_ = XOR(MixColumn___4__tmp37_,MixColumn___4__tmp6_);
  MixColumn___4__tmp45_ = XOR(MixColumn___4__tmp43_,MixColumn___4__tmp44_);
  _tmp81_4 = XOR(MixColumn___4__tmp45_,MixColumn___4__tmp48_);
  MixColumn___4__tmp52_ = XOR(MixColumn___4__tmp47_,MixColumn___4__tmp51_);
  _tmp81_3 = XOR(MixColumn___4__tmp52_,MixColumn___4__tmp55_);
  MixColumn___4__tmp59_ = XOR(MixColumn___4__tmp54_,MixColumn___4__tmp58_);
  _tmp81_2 = XOR(MixColumn___4__tmp59_,MixColumn___4__tmp62_);
  MixColumn___4__tmp66_ = XOR(MixColumn___4__tmp61_,MixColumn___4__tmp5_);
  _tmp81_1 = XOR(MixColumn___4__tmp66_,MixColumn___4__tmp69_);
  tmp__4__0__ = XOR(_tmp81_1,key__[4][0]);
  tmp__4__1__ = XOR(_tmp81_2,key__[4][1]);
  tmp__4__2__ = XOR(_tmp81_3,key__[4][2]);
  tmp__4__3__ = XOR(_tmp81_4,key__[4][3]);
  tmp__4__4__ = XOR(_tmp81_5,key__[4][4]);
  tmp__4__5__ = XOR(_tmp81_6,key__[4][5]);
  tmp__4__6__ = XOR(_tmp81_7,key__[4][6]);
  tmp__4__7__ = XOR(_tmp81_8,key__[4][7]);
  SubBytes_single__(tmp__4__0__,tmp__4__1__,tmp__4__2__,tmp__4__3__,tmp__4__4__,tmp__4__5__,tmp__4__6__,tmp__4__7__,&_tmp82_1,&_tmp82_2,&_tmp82_3,&_tmp82_4,&_tmp82_5,&_tmp82_6,&_tmp82_7,&_tmp82_8);
  ShiftRows_single__(_tmp82_1,&_tmp83_1);
  ShiftRows_single__(_tmp82_2,&_tmp83_2);
  ShiftRows_single__(_tmp82_3,&_tmp83_3);
  ShiftRows_single__(_tmp82_4,&_tmp83_4);
  ShiftRows_single__(_tmp82_5,&_tmp83_5);
  ShiftRows_single__(_tmp82_6,&_tmp83_6);
  ShiftRows_single__(_tmp82_7,&_tmp83_7);
  ShiftRows_single__(_tmp82_8,&_tmp83_8);
  RL32__(_tmp83_1,&MixColumn___5__tmp5_);
  MixColumn___5__tmp6_ = XOR(_tmp83_1,MixColumn___5__tmp5_);
  RL32__(_tmp83_8,&MixColumn___5__tmp7_);
  MixColumn___5__tmp10_ = XOR(_tmp83_8,MixColumn___5__tmp7_);
  RL64__(MixColumn___5__tmp10_,&MixColumn___5__tmp11_);
  RL32__(_tmp83_7,&MixColumn___5__tmp17_);
  MixColumn___5__tmp20_ = XOR(_tmp83_7,MixColumn___5__tmp17_);
  RL64__(MixColumn___5__tmp20_,&MixColumn___5__tmp21_);
  RL32__(_tmp83_6,&MixColumn___5__tmp24_);
  MixColumn___5__tmp27_ = XOR(_tmp83_6,MixColumn___5__tmp24_);
  RL64__(MixColumn___5__tmp27_,&MixColumn___5__tmp28_);
  RL32__(_tmp83_5,&MixColumn___5__tmp34_);
  MixColumn___5__tmp37_ = XOR(_tmp83_5,MixColumn___5__tmp34_);
  RL64__(MixColumn___5__tmp37_,&MixColumn___5__tmp38_);
  RL32__(_tmp83_4,&MixColumn___5__tmp44_);
  MixColumn___5__tmp47_ = XOR(_tmp83_4,MixColumn___5__tmp44_);
  RL64__(MixColumn___5__tmp47_,&MixColumn___5__tmp48_);
  RL32__(_tmp83_3,&MixColumn___5__tmp51_);
  MixColumn___5__tmp54_ = XOR(_tmp83_3,MixColumn___5__tmp51_);
  RL64__(MixColumn___5__tmp54_,&MixColumn___5__tmp55_);
  RL32__(_tmp83_2,&MixColumn___5__tmp58_);
  MixColumn___5__tmp61_ = XOR(_tmp83_2,MixColumn___5__tmp58_);
  RL64__(MixColumn___5__tmp61_,&MixColumn___5__tmp62_);
  RL64__(MixColumn___5__tmp6_,&MixColumn___5__tmp69_);
  MixColumn___5__tmp8_ = XOR(MixColumn___5__tmp6_,MixColumn___5__tmp7_);
  _tmp84_8 = XOR(MixColumn___5__tmp8_,MixColumn___5__tmp11_);
  MixColumn___5__tmp16_ = XOR(MixColumn___5__tmp10_,MixColumn___5__tmp6_);
  MixColumn___5__tmp18_ = XOR(MixColumn___5__tmp16_,MixColumn___5__tmp17_);
  _tmp84_7 = XOR(MixColumn___5__tmp18_,MixColumn___5__tmp21_);
  MixColumn___5__tmp25_ = XOR(MixColumn___5__tmp20_,MixColumn___5__tmp24_);
  _tmp84_6 = XOR(MixColumn___5__tmp25_,MixColumn___5__tmp28_);
  MixColumn___5__tmp33_ = XOR(MixColumn___5__tmp27_,MixColumn___5__tmp6_);
  MixColumn___5__tmp35_ = XOR(MixColumn___5__tmp33_,MixColumn___5__tmp34_);
  _tmp84_5 = XOR(MixColumn___5__tmp35_,MixColumn___5__tmp38_);
  MixColumn___5__tmp43_ = XOR(MixColumn___5__tmp37_,MixColumn___5__tmp6_);
  MixColumn___5__tmp45_ = XOR(MixColumn___5__tmp43_,MixColumn___5__tmp44_);
  _tmp84_4 = XOR(MixColumn___5__tmp45_,MixColumn___5__tmp48_);
  MixColumn___5__tmp52_ = XOR(MixColumn___5__tmp47_,MixColumn___5__tmp51_);
  _tmp84_3 = XOR(MixColumn___5__tmp52_,MixColumn___5__tmp55_);
  MixColumn___5__tmp59_ = XOR(MixColumn___5__tmp54_,MixColumn___5__tmp58_);
  _tmp84_2 = XOR(MixColumn___5__tmp59_,MixColumn___5__tmp62_);
  MixColumn___5__tmp66_ = XOR(MixColumn___5__tmp61_,MixColumn___5__tmp5_);
  _tmp84_1 = XOR(MixColumn___5__tmp66_,MixColumn___5__tmp69_);
  tmp__5__0__ = XOR(_tmp84_1,key__[5][0]);
  tmp__5__1__ = XOR(_tmp84_2,key__[5][1]);
  tmp__5__2__ = XOR(_tmp84_3,key__[5][2]);
  tmp__5__3__ = XOR(_tmp84_4,key__[5][3]);
  tmp__5__4__ = XOR(_tmp84_5,key__[5][4]);
  tmp__5__5__ = XOR(_tmp84_6,key__[5][5]);
  tmp__5__6__ = XOR(_tmp84_7,key__[5][6]);
  tmp__5__7__ = XOR(_tmp84_8,key__[5][7]);
  SubBytes_single__(tmp__5__0__,tmp__5__1__,tmp__5__2__,tmp__5__3__,tmp__5__4__,tmp__5__5__,tmp__5__6__,tmp__5__7__,&_tmp85_1,&_tmp85_2,&_tmp85_3,&_tmp85_4,&_tmp85_5,&_tmp85_6,&_tmp85_7,&_tmp85_8);
  ShiftRows_single__(_tmp85_1,&_tmp86_1);
  ShiftRows_single__(_tmp85_2,&_tmp86_2);
  ShiftRows_single__(_tmp85_3,&_tmp86_3);
  ShiftRows_single__(_tmp85_4,&_tmp86_4);
  ShiftRows_single__(_tmp85_5,&_tmp86_5);
  ShiftRows_single__(_tmp85_6,&_tmp86_6);
  ShiftRows_single__(_tmp85_7,&_tmp86_7);
  ShiftRows_single__(_tmp85_8,&_tmp86_8);
  RL32__(_tmp86_1,&MixColumn___6__tmp5_);
  MixColumn___6__tmp6_ = XOR(_tmp86_1,MixColumn___6__tmp5_);
  RL32__(_tmp86_8,&MixColumn___6__tmp7_);
  MixColumn___6__tmp10_ = XOR(_tmp86_8,MixColumn___6__tmp7_);
  RL64__(MixColumn___6__tmp10_,&MixColumn___6__tmp11_);
  RL32__(_tmp86_7,&MixColumn___6__tmp17_);
  MixColumn___6__tmp20_ = XOR(_tmp86_7,MixColumn___6__tmp17_);
  RL64__(MixColumn___6__tmp20_,&MixColumn___6__tmp21_);
  RL32__(_tmp86_6,&MixColumn___6__tmp24_);
  MixColumn___6__tmp27_ = XOR(_tmp86_6,MixColumn___6__tmp24_);
  RL64__(MixColumn___6__tmp27_,&MixColumn___6__tmp28_);
  RL32__(_tmp86_5,&MixColumn___6__tmp34_);
  MixColumn___6__tmp37_ = XOR(_tmp86_5,MixColumn___6__tmp34_);
  RL64__(MixColumn___6__tmp37_,&MixColumn___6__tmp38_);
  RL32__(_tmp86_4,&MixColumn___6__tmp44_);
  MixColumn___6__tmp47_ = XOR(_tmp86_4,MixColumn___6__tmp44_);
  RL64__(MixColumn___6__tmp47_,&MixColumn___6__tmp48_);
  RL32__(_tmp86_3,&MixColumn___6__tmp51_);
  MixColumn___6__tmp54_ = XOR(_tmp86_3,MixColumn___6__tmp51_);
  RL64__(MixColumn___6__tmp54_,&MixColumn___6__tmp55_);
  RL32__(_tmp86_2,&MixColumn___6__tmp58_);
  MixColumn___6__tmp61_ = XOR(_tmp86_2,MixColumn___6__tmp58_);
  RL64__(MixColumn___6__tmp61_,&MixColumn___6__tmp62_);
  RL64__(MixColumn___6__tmp6_,&MixColumn___6__tmp69_);
  MixColumn___6__tmp8_ = XOR(MixColumn___6__tmp6_,MixColumn___6__tmp7_);
  _tmp87_8 = XOR(MixColumn___6__tmp8_,MixColumn___6__tmp11_);
  MixColumn___6__tmp16_ = XOR(MixColumn___6__tmp10_,MixColumn___6__tmp6_);
  MixColumn___6__tmp18_ = XOR(MixColumn___6__tmp16_,MixColumn___6__tmp17_);
  _tmp87_7 = XOR(MixColumn___6__tmp18_,MixColumn___6__tmp21_);
  MixColumn___6__tmp25_ = XOR(MixColumn___6__tmp20_,MixColumn___6__tmp24_);
  _tmp87_6 = XOR(MixColumn___6__tmp25_,MixColumn___6__tmp28_);
  MixColumn___6__tmp33_ = XOR(MixColumn___6__tmp27_,MixColumn___6__tmp6_);
  MixColumn___6__tmp35_ = XOR(MixColumn___6__tmp33_,MixColumn___6__tmp34_);
  _tmp87_5 = XOR(MixColumn___6__tmp35_,MixColumn___6__tmp38_);
  MixColumn___6__tmp43_ = XOR(MixColumn___6__tmp37_,MixColumn___6__tmp6_);
  MixColumn___6__tmp45_ = XOR(MixColumn___6__tmp43_,MixColumn___6__tmp44_);
  _tmp87_4 = XOR(MixColumn___6__tmp45_,MixColumn___6__tmp48_);
  MixColumn___6__tmp52_ = XOR(MixColumn___6__tmp47_,MixColumn___6__tmp51_);
  _tmp87_3 = XOR(MixColumn___6__tmp52_,MixColumn___6__tmp55_);
  MixColumn___6__tmp59_ = XOR(MixColumn___6__tmp54_,MixColumn___6__tmp58_);
  _tmp87_2 = XOR(MixColumn___6__tmp59_,MixColumn___6__tmp62_);
  MixColumn___6__tmp66_ = XOR(MixColumn___6__tmp61_,MixColumn___6__tmp5_);
  _tmp87_1 = XOR(MixColumn___6__tmp66_,MixColumn___6__tmp69_);
  tmp__6__0__ = XOR(_tmp87_1,key__[6][0]);
  tmp__6__1__ = XOR(_tmp87_2,key__[6][1]);
  tmp__6__2__ = XOR(_tmp87_3,key__[6][2]);
  tmp__6__3__ = XOR(_tmp87_4,key__[6][3]);
  tmp__6__4__ = XOR(_tmp87_5,key__[6][4]);
  tmp__6__5__ = XOR(_tmp87_6,key__[6][5]);
  tmp__6__6__ = XOR(_tmp87_7,key__[6][6]);
  tmp__6__7__ = XOR(_tmp87_8,key__[6][7]);
  SubBytes_single__(tmp__6__0__,tmp__6__1__,tmp__6__2__,tmp__6__3__,tmp__6__4__,tmp__6__5__,tmp__6__6__,tmp__6__7__,&_tmp88_1,&_tmp88_2,&_tmp88_3,&_tmp88_4,&_tmp88_5,&_tmp88_6,&_tmp88_7,&_tmp88_8);
  ShiftRows_single__(_tmp88_1,&_tmp89_1);
  ShiftRows_single__(_tmp88_2,&_tmp89_2);
  ShiftRows_single__(_tmp88_3,&_tmp89_3);
  ShiftRows_single__(_tmp88_4,&_tmp89_4);
  ShiftRows_single__(_tmp88_5,&_tmp89_5);
  ShiftRows_single__(_tmp88_6,&_tmp89_6);
  ShiftRows_single__(_tmp88_7,&_tmp89_7);
  ShiftRows_single__(_tmp88_8,&_tmp89_8);
  RL32__(_tmp89_1,&MixColumn___7__tmp5_);
  MixColumn___7__tmp6_ = XOR(_tmp89_1,MixColumn___7__tmp5_);
  RL32__(_tmp89_8,&MixColumn___7__tmp7_);
  MixColumn___7__tmp10_ = XOR(_tmp89_8,MixColumn___7__tmp7_);
  RL64__(MixColumn___7__tmp10_,&MixColumn___7__tmp11_);
  RL32__(_tmp89_7,&MixColumn___7__tmp17_);
  MixColumn___7__tmp20_ = XOR(_tmp89_7,MixColumn___7__tmp17_);
  RL64__(MixColumn___7__tmp20_,&MixColumn___7__tmp21_);
  RL32__(_tmp89_6,&MixColumn___7__tmp24_);
  MixColumn___7__tmp27_ = XOR(_tmp89_6,MixColumn___7__tmp24_);
  RL64__(MixColumn___7__tmp27_,&MixColumn___7__tmp28_);
  RL32__(_tmp89_5,&MixColumn___7__tmp34_);
  MixColumn___7__tmp37_ = XOR(_tmp89_5,MixColumn___7__tmp34_);
  RL64__(MixColumn___7__tmp37_,&MixColumn___7__tmp38_);
  RL32__(_tmp89_4,&MixColumn___7__tmp44_);
  MixColumn___7__tmp47_ = XOR(_tmp89_4,MixColumn___7__tmp44_);
  RL64__(MixColumn___7__tmp47_,&MixColumn___7__tmp48_);
  RL32__(_tmp89_3,&MixColumn___7__tmp51_);
  MixColumn___7__tmp54_ = XOR(_tmp89_3,MixColumn___7__tmp51_);
  RL64__(MixColumn___7__tmp54_,&MixColumn___7__tmp55_);
  RL32__(_tmp89_2,&MixColumn___7__tmp58_);
  MixColumn___7__tmp61_ = XOR(_tmp89_2,MixColumn___7__tmp58_);
  RL64__(MixColumn___7__tmp61_,&MixColumn___7__tmp62_);
  RL64__(MixColumn___7__tmp6_,&MixColumn___7__tmp69_);
  MixColumn___7__tmp8_ = XOR(MixColumn___7__tmp6_,MixColumn___7__tmp7_);
  _tmp90_8 = XOR(MixColumn___7__tmp8_,MixColumn___7__tmp11_);
  MixColumn___7__tmp16_ = XOR(MixColumn___7__tmp10_,MixColumn___7__tmp6_);
  MixColumn___7__tmp18_ = XOR(MixColumn___7__tmp16_,MixColumn___7__tmp17_);
  _tmp90_7 = XOR(MixColumn___7__tmp18_,MixColumn___7__tmp21_);
  MixColumn___7__tmp25_ = XOR(MixColumn___7__tmp20_,MixColumn___7__tmp24_);
  _tmp90_6 = XOR(MixColumn___7__tmp25_,MixColumn___7__tmp28_);
  MixColumn___7__tmp33_ = XOR(MixColumn___7__tmp27_,MixColumn___7__tmp6_);
  MixColumn___7__tmp35_ = XOR(MixColumn___7__tmp33_,MixColumn___7__tmp34_);
  _tmp90_5 = XOR(MixColumn___7__tmp35_,MixColumn___7__tmp38_);
  MixColumn___7__tmp43_ = XOR(MixColumn___7__tmp37_,MixColumn___7__tmp6_);
  MixColumn___7__tmp45_ = XOR(MixColumn___7__tmp43_,MixColumn___7__tmp44_);
  _tmp90_4 = XOR(MixColumn___7__tmp45_,MixColumn___7__tmp48_);
  MixColumn___7__tmp52_ = XOR(MixColumn___7__tmp47_,MixColumn___7__tmp51_);
  _tmp90_3 = XOR(MixColumn___7__tmp52_,MixColumn___7__tmp55_);
  MixColumn___7__tmp59_ = XOR(MixColumn___7__tmp54_,MixColumn___7__tmp58_);
  _tmp90_2 = XOR(MixColumn___7__tmp59_,MixColumn___7__tmp62_);
  MixColumn___7__tmp66_ = XOR(MixColumn___7__tmp61_,MixColumn___7__tmp5_);
  _tmp90_1 = XOR(MixColumn___7__tmp66_,MixColumn___7__tmp69_);
  tmp__7__0__ = XOR(_tmp90_1,key__[7][0]);
  tmp__7__1__ = XOR(_tmp90_2,key__[7][1]);
  tmp__7__2__ = XOR(_tmp90_3,key__[7][2]);
  tmp__7__3__ = XOR(_tmp90_4,key__[7][3]);
  tmp__7__4__ = XOR(_tmp90_5,key__[7][4]);
  tmp__7__5__ = XOR(_tmp90_6,key__[7][5]);
  tmp__7__6__ = XOR(_tmp90_7,key__[7][6]);
  tmp__7__7__ = XOR(_tmp90_8,key__[7][7]);
  SubBytes_single__(tmp__7__0__,tmp__7__1__,tmp__7__2__,tmp__7__3__,tmp__7__4__,tmp__7__5__,tmp__7__6__,tmp__7__7__,&_tmp91_1,&_tmp91_2,&_tmp91_3,&_tmp91_4,&_tmp91_5,&_tmp91_6,&_tmp91_7,&_tmp91_8);
  ShiftRows_single__(_tmp91_1,&_tmp92_1);
  ShiftRows_single__(_tmp91_2,&_tmp92_2);
  ShiftRows_single__(_tmp91_3,&_tmp92_3);
  ShiftRows_single__(_tmp91_4,&_tmp92_4);
  ShiftRows_single__(_tmp91_5,&_tmp92_5);
  ShiftRows_single__(_tmp91_6,&_tmp92_6);
  ShiftRows_single__(_tmp91_7,&_tmp92_7);
  ShiftRows_single__(_tmp91_8,&_tmp92_8);
  RL32__(_tmp92_1,&MixColumn___8__tmp5_);
  MixColumn___8__tmp6_ = XOR(_tmp92_1,MixColumn___8__tmp5_);
  RL32__(_tmp92_8,&MixColumn___8__tmp7_);
  MixColumn___8__tmp10_ = XOR(_tmp92_8,MixColumn___8__tmp7_);
  RL64__(MixColumn___8__tmp10_,&MixColumn___8__tmp11_);
  RL32__(_tmp92_7,&MixColumn___8__tmp17_);
  MixColumn___8__tmp20_ = XOR(_tmp92_7,MixColumn___8__tmp17_);
  RL64__(MixColumn___8__tmp20_,&MixColumn___8__tmp21_);
  RL32__(_tmp92_6,&MixColumn___8__tmp24_);
  MixColumn___8__tmp27_ = XOR(_tmp92_6,MixColumn___8__tmp24_);
  RL64__(MixColumn___8__tmp27_,&MixColumn___8__tmp28_);
  RL32__(_tmp92_5,&MixColumn___8__tmp34_);
  MixColumn___8__tmp37_ = XOR(_tmp92_5,MixColumn___8__tmp34_);
  RL64__(MixColumn___8__tmp37_,&MixColumn___8__tmp38_);
  RL32__(_tmp92_4,&MixColumn___8__tmp44_);
  MixColumn___8__tmp47_ = XOR(_tmp92_4,MixColumn___8__tmp44_);
  RL64__(MixColumn___8__tmp47_,&MixColumn___8__tmp48_);
  RL32__(_tmp92_3,&MixColumn___8__tmp51_);
  MixColumn___8__tmp54_ = XOR(_tmp92_3,MixColumn___8__tmp51_);
  RL64__(MixColumn___8__tmp54_,&MixColumn___8__tmp55_);
  RL32__(_tmp92_2,&MixColumn___8__tmp58_);
  MixColumn___8__tmp61_ = XOR(_tmp92_2,MixColumn___8__tmp58_);
  RL64__(MixColumn___8__tmp61_,&MixColumn___8__tmp62_);
  RL64__(MixColumn___8__tmp6_,&MixColumn___8__tmp69_);
  MixColumn___8__tmp8_ = XOR(MixColumn___8__tmp6_,MixColumn___8__tmp7_);
  _tmp93_8 = XOR(MixColumn___8__tmp8_,MixColumn___8__tmp11_);
  MixColumn___8__tmp16_ = XOR(MixColumn___8__tmp10_,MixColumn___8__tmp6_);
  MixColumn___8__tmp18_ = XOR(MixColumn___8__tmp16_,MixColumn___8__tmp17_);
  _tmp93_7 = XOR(MixColumn___8__tmp18_,MixColumn___8__tmp21_);
  MixColumn___8__tmp25_ = XOR(MixColumn___8__tmp20_,MixColumn___8__tmp24_);
  _tmp93_6 = XOR(MixColumn___8__tmp25_,MixColumn___8__tmp28_);
  MixColumn___8__tmp33_ = XOR(MixColumn___8__tmp27_,MixColumn___8__tmp6_);
  MixColumn___8__tmp35_ = XOR(MixColumn___8__tmp33_,MixColumn___8__tmp34_);
  _tmp93_5 = XOR(MixColumn___8__tmp35_,MixColumn___8__tmp38_);
  MixColumn___8__tmp43_ = XOR(MixColumn___8__tmp37_,MixColumn___8__tmp6_);
  MixColumn___8__tmp45_ = XOR(MixColumn___8__tmp43_,MixColumn___8__tmp44_);
  _tmp93_4 = XOR(MixColumn___8__tmp45_,MixColumn___8__tmp48_);
  MixColumn___8__tmp52_ = XOR(MixColumn___8__tmp47_,MixColumn___8__tmp51_);
  _tmp93_3 = XOR(MixColumn___8__tmp52_,MixColumn___8__tmp55_);
  MixColumn___8__tmp59_ = XOR(MixColumn___8__tmp54_,MixColumn___8__tmp58_);
  _tmp93_2 = XOR(MixColumn___8__tmp59_,MixColumn___8__tmp62_);
  MixColumn___8__tmp66_ = XOR(MixColumn___8__tmp61_,MixColumn___8__tmp5_);
  _tmp93_1 = XOR(MixColumn___8__tmp66_,MixColumn___8__tmp69_);
  tmp__8__0__ = XOR(_tmp93_1,key__[8][0]);
  tmp__8__1__ = XOR(_tmp93_2,key__[8][1]);
  tmp__8__2__ = XOR(_tmp93_3,key__[8][2]);
  tmp__8__3__ = XOR(_tmp93_4,key__[8][3]);
  tmp__8__4__ = XOR(_tmp93_5,key__[8][4]);
  tmp__8__5__ = XOR(_tmp93_6,key__[8][5]);
  tmp__8__6__ = XOR(_tmp93_7,key__[8][6]);
  tmp__8__7__ = XOR(_tmp93_8,key__[8][7]);
  SubBytes_single__(tmp__8__0__,tmp__8__1__,tmp__8__2__,tmp__8__3__,tmp__8__4__,tmp__8__5__,tmp__8__6__,tmp__8__7__,&_tmp94_1,&_tmp94_2,&_tmp94_3,&_tmp94_4,&_tmp94_5,&_tmp94_6,&_tmp94_7,&_tmp94_8);
  ShiftRows_single__(_tmp94_1,&_tmp95_1);
  ShiftRows_single__(_tmp94_2,&_tmp95_2);
  ShiftRows_single__(_tmp94_3,&_tmp95_3);
  ShiftRows_single__(_tmp94_4,&_tmp95_4);
  ShiftRows_single__(_tmp94_5,&_tmp95_5);
  ShiftRows_single__(_tmp94_6,&_tmp95_6);
  ShiftRows_single__(_tmp94_7,&_tmp95_7);
  ShiftRows_single__(_tmp94_8,&_tmp95_8);
  RL32__(_tmp95_1,&MixColumn___9__tmp5_);
  MixColumn___9__tmp6_ = XOR(_tmp95_1,MixColumn___9__tmp5_);
  RL32__(_tmp95_8,&MixColumn___9__tmp7_);
  MixColumn___9__tmp10_ = XOR(_tmp95_8,MixColumn___9__tmp7_);
  RL64__(MixColumn___9__tmp10_,&MixColumn___9__tmp11_);
  RL32__(_tmp95_7,&MixColumn___9__tmp17_);
  MixColumn___9__tmp20_ = XOR(_tmp95_7,MixColumn___9__tmp17_);
  RL64__(MixColumn___9__tmp20_,&MixColumn___9__tmp21_);
  RL32__(_tmp95_6,&MixColumn___9__tmp24_);
  MixColumn___9__tmp27_ = XOR(_tmp95_6,MixColumn___9__tmp24_);
  RL64__(MixColumn___9__tmp27_,&MixColumn___9__tmp28_);
  RL32__(_tmp95_5,&MixColumn___9__tmp34_);
  MixColumn___9__tmp37_ = XOR(_tmp95_5,MixColumn___9__tmp34_);
  RL64__(MixColumn___9__tmp37_,&MixColumn___9__tmp38_);
  RL32__(_tmp95_4,&MixColumn___9__tmp44_);
  MixColumn___9__tmp47_ = XOR(_tmp95_4,MixColumn___9__tmp44_);
  RL64__(MixColumn___9__tmp47_,&MixColumn___9__tmp48_);
  RL32__(_tmp95_3,&MixColumn___9__tmp51_);
  MixColumn___9__tmp54_ = XOR(_tmp95_3,MixColumn___9__tmp51_);
  RL64__(MixColumn___9__tmp54_,&MixColumn___9__tmp55_);
  RL32__(_tmp95_2,&MixColumn___9__tmp58_);
  MixColumn___9__tmp61_ = XOR(_tmp95_2,MixColumn___9__tmp58_);
  RL64__(MixColumn___9__tmp61_,&MixColumn___9__tmp62_);
  RL64__(MixColumn___9__tmp6_,&MixColumn___9__tmp69_);
  MixColumn___9__tmp8_ = XOR(MixColumn___9__tmp6_,MixColumn___9__tmp7_);
  _tmp96_8 = XOR(MixColumn___9__tmp8_,MixColumn___9__tmp11_);
  MixColumn___9__tmp16_ = XOR(MixColumn___9__tmp10_,MixColumn___9__tmp6_);
  MixColumn___9__tmp18_ = XOR(MixColumn___9__tmp16_,MixColumn___9__tmp17_);
  _tmp96_7 = XOR(MixColumn___9__tmp18_,MixColumn___9__tmp21_);
  MixColumn___9__tmp25_ = XOR(MixColumn___9__tmp20_,MixColumn___9__tmp24_);
  _tmp96_6 = XOR(MixColumn___9__tmp25_,MixColumn___9__tmp28_);
  MixColumn___9__tmp33_ = XOR(MixColumn___9__tmp27_,MixColumn___9__tmp6_);
  MixColumn___9__tmp35_ = XOR(MixColumn___9__tmp33_,MixColumn___9__tmp34_);
  _tmp96_5 = XOR(MixColumn___9__tmp35_,MixColumn___9__tmp38_);
  MixColumn___9__tmp43_ = XOR(MixColumn___9__tmp37_,MixColumn___9__tmp6_);
  MixColumn___9__tmp45_ = XOR(MixColumn___9__tmp43_,MixColumn___9__tmp44_);
  _tmp96_4 = XOR(MixColumn___9__tmp45_,MixColumn___9__tmp48_);
  MixColumn___9__tmp52_ = XOR(MixColumn___9__tmp47_,MixColumn___9__tmp51_);
  _tmp96_3 = XOR(MixColumn___9__tmp52_,MixColumn___9__tmp55_);
  MixColumn___9__tmp59_ = XOR(MixColumn___9__tmp54_,MixColumn___9__tmp58_);
  _tmp96_2 = XOR(MixColumn___9__tmp59_,MixColumn___9__tmp62_);
  MixColumn___9__tmp66_ = XOR(MixColumn___9__tmp61_,MixColumn___9__tmp5_);
  _tmp96_1 = XOR(MixColumn___9__tmp66_,MixColumn___9__tmp69_);
  tmp__9__0__ = XOR(_tmp96_1,key__[9][0]);
  tmp__9__1__ = XOR(_tmp96_2,key__[9][1]);
  tmp__9__2__ = XOR(_tmp96_3,key__[9][2]);
  tmp__9__3__ = XOR(_tmp96_4,key__[9][3]);
  tmp__9__4__ = XOR(_tmp96_5,key__[9][4]);
  tmp__9__5__ = XOR(_tmp96_6,key__[9][5]);
  tmp__9__6__ = XOR(_tmp96_7,key__[9][6]);
  tmp__9__7__ = XOR(_tmp96_8,key__[9][7]);
  SubBytes_single__(tmp__9__0__,tmp__9__1__,tmp__9__2__,tmp__9__3__,tmp__9__4__,tmp__9__5__,tmp__9__6__,tmp__9__7__,&_tmp97_1,&_tmp97_2,&_tmp97_3,&_tmp97_4,&_tmp97_5,&_tmp97_6,&_tmp97_7,&_tmp97_8);
  ShiftRows_single__(_tmp97_1,&_tmp98_1);
  ShiftRows_single__(_tmp97_2,&_tmp98_2);
  ShiftRows_single__(_tmp97_3,&_tmp98_3);
  ShiftRows_single__(_tmp97_4,&_tmp98_4);
  ShiftRows_single__(_tmp97_5,&_tmp98_5);
  ShiftRows_single__(_tmp97_6,&_tmp98_6);
  ShiftRows_single__(_tmp97_7,&_tmp98_7);
  ShiftRows_single__(_tmp97_8,&_tmp98_8);
  cipher__[0] = XOR(_tmp98_1,key__[10][0]);
  cipher__[1] = XOR(_tmp98_2,key__[10][1]);
  cipher__[2] = XOR(_tmp98_3,key__[10][2]);
  cipher__[3] = XOR(_tmp98_4,key__[10][3]);
  cipher__[4] = XOR(_tmp98_5,key__[10][4]);
  cipher__[5] = XOR(_tmp98_6,key__[10][5]);
  cipher__[6] = XOR(_tmp98_7,key__[10][6]);
  cipher__[7] = XOR(_tmp98_8,key__[10][7]);

}

#include "key_sched.c"

#define NB_LOOP 10000000

int main() {

  __m128i plain[8], cipher[8];
  
  uint8_t plain_std[16] = { 0x54, 0x77, 0x6F, 0x20, 0x4F, 0x6E, 0x65, 0x20,
                            0x4E, 0x69, 0x6E, 0x65, 0x20, 0x54, 0x77, 0x6F };
  for (int i = 0; i < 8; i++)
    plain[i] = _mm_load_si128((__m128i*)plain_std);
  real_ortho_128x128(plain);

  
  char key_base[16] = { 0x54, 0x68, 0x61, 0x74, 0x73, 0x20, 0x6D, 0x79,
                   0x20, 0x4B, 0x75, 0x6E, 0x67, 0x20, 0x46, 0x75 };
  char* sched_key = key_sched(key_base);
  __m128i key[11][8];
  for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 8; j++)
      key[i][j] = _mm_load_si128((__m128i*)&sched_key[i*16]);
    real_ortho_128x128(key[i]);
  }

  /* Warming up the caches */
  for (int i = 0; i < 10000; i++) {
    real_ortho_128x128(plain);
    AES__(plain,key,cipher);
    real_ortho_128x128(cipher);
  }
   

  uint64_t timer = _rdtsc();
  for (int i = 0; i < NB_LOOP; i++) {
    AES__(plain,key,cipher);
  }
  timer = _rdtsc() - timer;
  printf("Just AES (no transpo): %lu        => %.2f cycle/byte\n",timer/NB_LOOP,(double)timer/NB_LOOP/(16.*8));
  
  timer = _rdtsc();
  for (int i = 0; i < NB_LOOP; i++) {
    real_ortho_128x128(plain);
    AES__(plain,key,cipher);
    real_ortho_128x128(cipher);
  }
  timer = _rdtsc() - timer;
  printf("AES with transpo: %lu        => %.2f cycle/byte\n",timer/NB_LOOP,(double)timer/NB_LOOP/(16.*8));
  
  return 0;
}
